home *** CD-ROM | disk | FTP | other *** search
Text File | 2001-11-18 | 43.6 KB | 1,091 lines |
- !library
-
- !asl-version <300>
-
- ' N.B. THIS IS RELEASE 6 FOR QUEST 3.02 OR LATER
-
- !addto game
- command <examine in #q3ext.qlb.object#> do <q3ext.qlb.ExamProc>
- command <examine #q3ext.qlb.object#> do <q3ext.qlb.ExamProc>
- command <look in #q3ext.qlb.object#> do <q3ext.qlb.ExamProc>
- command <look at #q3ext.qlb.object#> do <q3ext.qlb.LookProc>
- command <look #q3ext.qlb.object#> do <q3ext.qlb.LookProc>
- command <give #q3ext.qlb.give#> do <q3ext.qlb.GiveProc>
- command <drop #q3ext.qlb.object# in #q3ext.qlb.container#> do <q3ext.qlb.PutInProc>
- command <drop #q3ext.qlb.object#> exec <drop $q3ext.qlb.objname(#q3ext.qlb.object#)$;normal>
- command <take #q3ext.qlb.object# from #q3ext.qlb.container#> do <q3ext.qlb.TakeBackProc>
- command <take #q3ext.qlc.container#'s #q3ext.qlb.object#> do <q3ext.qlb.TakeBackProc>
- command <take #q3ext.qlb.container#s #q3ext.qlb.object#> do <q3ext.qlb.TakeBackProc>
- command <take #q3ext.qlb.container#' #q3ext.qlb.object#> do <q3ext.qlb.TakeBackProc>
- command <take #q3ext.qlb.object#> do <q3ext.qlb.SpecialTakeProc>
- command <read #q3ext.qlb.object#> do <q3ext.qlb.ReadProc>
- command <wear #q3ext.qlb.object#> do <q3ext.qlb.WearProc>
- command <unwear #q3ext.qlb.object#> do <q3ext.qlb.UnWearProc>
- command <open #q3ext.qlb.object#> do <q3ext.qlb.OpenProc>
- command <close #q3ext.qlb.object#> do <q3ext.qlb.CloseProc>
- !end
-
- !addto synonyms
- of; the =
- x = examine
- put; put down = drop
- give back = give
- pick up; pick; get; take back = take
- out of; back from = from
- in to; into; inside = in
- back to = to
- don; drop on = wear
- take off; remove = unwear
- shut = close
- talk = speak
- look at in = examine
- go = go to
- to to = to
- !end
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* This is a dummy room - only needed for the force_refresh procedure to function *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define room <q3ext.qlb.limbo>
- look <Just a dummy!>
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* This procedure implements an alternative room description - optional usage *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.DescribeRoomProc>
- set string <q3ext.qlb.indescription;$gettag(#quest.currentroom#;indescription)$>
- if is <#q3ext.qlb.indescription#;> then {
- msg <|nYou are in $gettag(#quest.currentroom#;prefix)$ |b|cl#quest.currentroom#.|cb|xb|xn>
- }
- else {
- msg <|n#q3ext.qlb.indescription#$gettag(#quest.currentroom#;prefix)$ |b|cl#quest.currentroom#.|cb|xb|xn>
- }
- set string <q3ext.qlb.ObjList;>
- set string <q3ext.qlb.CharList;>
- for each object in <#quest.currentroom#> {
- if property <#quest.thing#;invisible> or property <#quest.thing#;hidden> then {
- }
- else {
- if property <#quest.thing#;human> then {
- set <q3ext.qlb.CharList;#q3ext.qlb.CharList# |b#quest.thing#|xb, >
- }
- else{
- set <q3ext.qlb.ObjList;#q3ext.qlb.ObjList# $objectproperty(#quest.thing#;prefix)$>
- set <q3ext.qlb.ObjList;#q3ext.qlb.ObjList# |b#quest.thing#|xb, >
- }
- }
- }
- if ($lengthof(#q3ext.qlb.CharList#)$ >0) then {
- set numeric <q3ext.qlb.LengthOf;$lengthof(#q3ext.qlb.CharList#)$ - 1>
- set <q3ext.qlb.CharList;$left(#q3ext.qlb.CharList#;%q3ext.qlb.LengthOf%)$>
- set <q3ext.qlb.CharList;$q3ext.qlb.parsed(#q3ext.qlb.CharList#)$>
- if ($instr(#q3ext.qlb.CharList#;_and_)$ >0) then {
- msg < (#q3ext.qlb.CharList# are also here.)|xn>
- }
- else {
- msg < (#q3ext.qlb.CharList# is also here.)|xn>
- }
- }
- msg <|n|n$parameter(1)$|n>
- if ($lengthof(#q3ext.qlb.ObjList#)$ >0) then {
- set <q3ext.qlb.LengthOf;$lengthof(#q3ext.qlb.ObjList#)$ - 1>
- set <q3ext.qlb.ObjList;$left(#q3ext.qlb.ObjList#;%q3ext.qlb.LengthOf%)$>
- set <q3ext.qlb.ObjList;$q3ext.qlb.parsed(#q3ext.qlb.ObjList#)$>
- if ($instr(#q3ext.qlb.ObjList#;_and_)$ >0) then {
- msg <There are #q3ext.qlb.ObjList# here.|n>
- }
- else {
- msg <There is #q3ext.qlb.ObjList# here.|n>
- }
- }
- if not is <#quest.doorways.dirs#;> then {
- msg <You can move #quest.doorways.dirs#.>
- }
- if not is <#quest.doorways.places#;> then {
- msg <You can go to #quest.doorways.places#.>
- }
- if not is <#quest.doorways.out#;> then {
- msg <You can go out to |b#quest.doorways.out.display#|xb.>
- }
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* All regular 'take' commands are directed here to be tested for special needs *
- '* The code redirects to other procedures if object is in a container, and also *
- '* checks the player doesn't already have the item & prints message if he does. *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.SpecialTakeProc>
- set string <q3ext.qlb.containedby;$q3ext.qlb.containedby$>
- if (#q3ext.qlb.containedby# = nil) then {
- if got <#q3ext.qlb.object#> then {
- msg <You already have the #q3ext.qlb.object#.>
- }
- else {
- exec <take #q3ext.qlb.object#;normal>
- }
- }
- else {
- do <q3ext.qlb.TakeBackProc>
- }
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* This code is called if an object is taken that is in a container *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.TakeBackProc>
- set string <q3ext.qlb.containedby;$q3ext.qlb.containedby$>
- if (#q3ext.qlb.containedby# = nil) then {
- msg <(assuming you meant to take the #q3ext.qlb.object#).>
- exec <take #q3ext.qlb.object#>
- }
- else {
- if here <#q3ext.qlb.containedby#> or got <#q3ext.qlb.containedby#> then {
- if not property <#q3ext.qlb.containedby#; closed> then {
- move <#q3ext.qlb.object#;#quest.currentroom#>
- }
- }
- outputoff
- exec <take #q3ext.qlb.object#;normal>
- outputoff
- set string <q3ext.qlb.wherenow;#quest.currentroom#>
- goto <q3ext.qlb.limbo>
- goto <#q3ext.qlb.wherenow#>
- outputon
- if got <#q3ext.qlb.object#> then {
- if property <#q3ext.qlb.containedby#;human> then {
- msg <You take the #q3ext.qlb.object# from $capfirst(#q3ext.qlb.containedby#)$.>
- }
- else {
- msg <You take the #q3ext.qlb.object# out of the #q3ext.qlb.containedby#.>
- }
- }
- else {
- exec <take #q3ext.qlb.object#;normal>
- }
- }
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* Code called when an object is 'given to' or 'put into' a container *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.GiveProc>
- set numeric <q3ext.qlb.ToPos;$instr(#q3ext.qlb.give#;_to_)$>
- if (%q3ext.qlb.ToPos% <> 0) then {
- set string <q3ext.qlb.GiveObj;$left(#q3ext.qlb.give#;%q3ext.qlb.ToPos%)$>
- set string <q3ext.qlb.GiveObj;$q3ext.qlb.realname(#q3ext.qlb.Giveobj#)$>
- set <q3ext.qlb.ToPos;%q3ext.qlb.ToPos% + 4>
- set string <q3ext.qlb.GiveTo;$mid(#q3ext.qlb.give#;%q3ext.qlb.ToPos%)$>
- set string <q3ext.qlb.GiveTo;$q3ext.qlb.realname(#q3ext.qlb.GiveTo#)$>
- if not property <#q3ext.qlb.GiveObj#; unworn> and action <#q3ext.qlb.GiveObj#;wear> then {
- msg <You'll have to take $objectproperty(#q3ext.qlb.GiveObj#;pronoun)$ off first.>
- }
- else {
- if here <#q3ext.qlb.GiveObj#> or got <#q3ext.qlb.GiveObj#> then {
- if here <#q3ext.qlb.GiveTo#> or got <#q3ext.qlb.GiveTo#> then {
- if property <#q3ext.qlb.GiveTo#;container> and not property <#q3ext.qlb.GiveTo#; closed> then {
- if got <#q3ext.qlb.GiveTo#> then {
- outputoff
- exec <drop #q3ext.qlb.GiveTo#>
- outputon
- exec <give #q3ext.qlb.GiveObj# to $q3ext.qlb.objname(#q3ext.qlb.GiveTo#)$; normal>
- outputoff
- exec <take #q3ext.qlb.GiveTo#>
- do <force_refresh>
- outputon
- }
- else {
- exec <give #q3ext.qlb.GiveObj# to $q3ext.qlb.objname(#q3ext.qlb.GiveTo#)$; normal>
- do <force_refresh>
- }
- }
- else {
- if property <#q3ext.qlb.GiveObj#;human > then {
- msg <You try, but $capfirst(#q3ext.qlb.GiveObj#)$ isn't interested.>
- }
- else {
- msg <Hard as you try, you find you cannot do that|xn>
- if property <#q3ext.qlb.GiveTo#; closed> then {
- msg < while the #q3ext.qlb.GiveTo# is closed.>
- }
- else {
- msg <.|n>
- }
- }
- }
- }
- else {
- if property <#q3ext.qlb.GiveTo#;human> then {
- msg <$capfirst(#q3ext.qlb.GiveObj#)$ isn't here.>
- }
- else {
- msg <The #q3ext.qlb.GiveTo# isn't available.>
- }
- }
- }
- else {
- if property <#q3ext.qlb.GiveObj#;human > then {
- msg <$capfirst(#q3ext.qlb.GiveObj#)$ isn't here.>
- }
- else {
- msg <The #q3ext.qlb.GiveObj# isn't available.>
- }
- }
- }
- }
- else {
- '*** Deals with 'Give character the object' style.
- for <q3ext.qlb.SpaceTrue;1;$lengthof(#q3ext.qlb.give#)$> do <q3ext.qlb.SpaceTest>
- set string <q3ext.qlb.GiveTo;$left(#q3ext.qlb.give#;%q3ext.qlb.FoundSpace%)$>
- set string <q3ext.qlb.GiveObj;$mid(#q3ext.qlb.give#;%q3ext.qlb.FoundSpace%)$>
- exec <give #q3ext.qlb.GiveObj# to #q3ext.qlb.GiveTo#>
- }
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* A utility procedure, called to find the positions of spaces in player input *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.SpaceTest>
- set string <q3ext.qlb.Space;$mid(c o;2;1)$>
- set string <q3ext.qlb.TestPart;$mid(#q3ext.qlb.give#;%q3ext.qlb.SpaceTrue%;1)$>
- if is <#q3ext.qlb.space#;#q3ext.qlb.TestPart#> then set numeric <q3ext.qlb.FoundSpace;%q3ext.qlb.SpaceTrue%>
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* This procedure deals with examining containers & objects in containers. *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.ExamProc>
- set <q3ext.qlb.object; $q3ext.qlb.objname(#q3ext.qlb.object#)$>
- set <q3ext.qlb.object; $q3ext.qlb.wornfix()$>
- set string <q3ext.qlb.containedby;$q3ext.qlb.containedby$>
- set string <q3ext.qlb.whereat;#quest.currentroom#>
- if (#q3ext.qlb.containedby# = nil) then {
- if action <#q3ext.qlb.object#; open> then {
- if property <#q3ext.qlb.object#; closed> then {
- if ($objectproperty(#q3ext.qlb.object#; closedexam)$ = null) then {
- msg <Nothing out of the ordinary.>
- }
- else {
- msg <$objectproperty(#q3ext.qlb.object#; closedexam)$.>
- }
- }
- else {
- if ($objectproperty(#q3ext.qlb.object#; openexam)$ = null) then {
- msg <Nothing out of the ordinary.>
- }
- else {
- msg <$objectproperty(#q3ext.qlb.object#; openexam)$.>
- }
- }
- }
- else {
- exec <examine #q3ext.qlb.object#;normal>
- }
- if property <#q3ext.qlb.object#;container> then {
- if here <#q3ext.qlb.object#> or got <#q3ext.qlb.object#> then {
- doaction <#q3ext.qlb.object#;contents>
- }
- }
- }
- else {
- if here <#q3ext.qlb.containedby#> or got <#q3ext.qlb.containedby#> then {
- if not property <#q3ext.qlb.containedby#; closed> then {
- outputoff
- goto <#q3ext.qlb.containedby#_inventory>
- outputon
- if action <#q3ext.qlb.object#; open> then {
- if property <#q3ext.qlb.object#; closed> then {
- if ($objectproperty(#q3ext.qlb.object#; closedexam)$ = null) then {
- msg <Nothing out of the ordinary.>
- }
- else {
- msg <$objectproperty(#q3ext.qlb.object#; closedexam)$.>
- }
- }
- else {
- if ($objectproperty(#q3ext.qlb.object#; openexam)$ = null) then {
- msg <Nothing out of the ordinary.>
- }
- else {
- msg <$objectproperty(#q3ext.qlb.object#; openexam)$.>
- }
- }
- }
- else {
- exec <examine #q3ext.qlb.object#;normal>
- }
- outputoff
- goto <#q3ext.qlb.whereat#>
- outputon
- }
- else {
- exec <examine #q3ext.qlb.object#;normal>
- }
- }
- else {
- exec <examine #q3ext.qlb.object#;normal>
- }
- }
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* This procedure deals with 'looking at' objects held in containers. *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.LookProc>
- set <q3ext.qlb.object; $q3ext.qlb.realname(#q3ext.qlb.object#)$>
- set <q3ext.qlb.object; $q3ext.qlb.wornfix()$>
- set string <q3ext.qlb.containedby;$q3ext.qlb.containedby$>
- set string <q3ext.qlb.whereat;#quest.currentroom#>
- if (#q3ext.qlb.containedby# = nil) then {
- exec <look at $q3ext.qlb.objname(#q3ext.qlb.object#)$;normal>
- }
- else {
- if here <#q3ext.qlb.containedby#> or got <#q3ext.qlb.containedby#> then {
- if not property <#q3ext.qlb.containedby#; closed> then {
- outputoff
- goto <#q3ext.qlb.containedby#_inventory>
- outputon
- exec <look at $q3ext.qlb.objname(#q3ext.qlb.object#)$;normal>
- outputoff
- goto <#q3ext.qlb.whereat#>
- outputon
- }
- else {
- exec <look at $q3ext.qlb.objname(#q3ext.qlb.object#)$;normal>
- }
- }
- else {
- exec <look at $q3ext.qlb.objname(#q3ext.qlb.object#)$;normal>
- }
- }
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* Redirects 'put into' so that it is processed by the 'give to' routine, these *
- '* are functionally identical so no need to have duplicate code *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.PutInProc>
- exec <give #q3ext.qlb.object# to #q3ext.qlb.container#>
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* A utility procedure, returns the position of the last comma in a passed string *
- '* Used to replace the last comma with 'and' when parsing output strings *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.LastCommaProc>
- set string <q3ext.qlb.TestPart;$mid(#q3ext.qlb.Param#;%q3ext.qlb.LastComma%;1)$>
- if is <#q3ext.qlb.TestPart#;,> then set <q3ext.qlb.FoundComma;%q3ext.qlb.LastComma%>
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* The 'read' command procedure. *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.ReadProc>
- set <q3ext.qlb.object;$q3ext.qlb.realname(#q3ext.qlb.object#)$>
- if property <#q3ext.qlb.object#;readable> then {
- doaction <#q3ext.qlb.object#;read>
- if not is <$objectproperty(#q3ext.qlb.object#;readaction)$; nil> then {
- doaction <#q3ext.qlb.object#;readaction>
- }
- }
- else {
- msg <There's nothing to read!>
- }
- end define
-
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* The 'wear' command procedure. *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.WearProc>
- set <q3ext.qlb.object;$q3ext.qlb.realname(#q3ext.qlb.object#)$>
- msg <#q3ext.qlb.object#.....>
- if got <#q3ext.qlb.object#> then {
- if action <#q3ext.qlb.object#;wear> then {
- if ($objectproperty(#q3ext.qlb.object#;sex)$ = %q3ext.qlb.playersex%) then {
- do <q3ext.qlb.CheckWearProc>
- }
- else {
- msg <On second thoughts you decide that the |xn>
- msg <#q3ext.qlb.object# |xn>
- if (%q3ext.qlb.playersex% = 1) then {
- msg <won't suit a man like you at all.>
- }
- else {
- msg <won't suit a woman like you at all.>
- }
- }
- }
- else {
- msg <You cannot wear the #q3ext.qlb.object#.>
- }
- }
- else {
- msg <You are not carrying the #q3ext.qlb.object#.>
- }
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* The 'CheckWear' procedure - this checks the sense of wear commands *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.CheckWearProc>
- set numeric <q3ext.qlb.wearable;0>
- if ($objectproperty(#q3ext.qlb.object#;topcover)$ <> 0) and __
- ($objectproperty(#q3ext.qlb.object#;topcover)$ <= %q3ext.qlb.topcovered%) then {
- set <q3ext.qlb.wearable;%q3ext.qlb.wearable% + 1>
- }
- if ($objectproperty(#q3ext.qlb.object#;headcover)$ <> 0) and __
- ($objectproperty(#q3ext.qlb.object#;headcover)$ <= %q3ext.qlb.headcovered%) then {
- set <q3ext.qlb.wearable;%q3ext.qlb.wearable% + 1>
- }
- if ($objectproperty(#q3ext.qlb.object#;feetcover)$ <> 0) and __
- ($objectproperty(#q3ext.qlb.object#;feetcover)$ <= %q3ext.qlb.feetcovered%) then {
- set <q3ext.qlb.wearable;%q3ext.qlb.wearable% + 1>
- }
- if ($objectproperty(#q3ext.qlb.object#;handscover)$ <> 0) and __
- ($objectproperty(#q3ext.qlb.object#;handscover)$ <= %q3ext.qlb.handscovered%) then {
- set <q3ext.qlb.wearable;%q3ext.qlb.wearable% + 1>
- }
- ' - disallow for coats (don't affect ability to put on lower torso clothes)
- set <q3ext.qlb.tempcovered;%q3ext.qlb.botcovered%>
- if (%q3ext.qlb.tempcovered% > 63) and __
- ($objectproperty(#q3ext.qlb.object#;botcover)$ < 33) then {
- set <q3ext.qlb.tempcovered;%q3ext.qlb.tempcovered% - 64>
- }
- ' - disallow for skirts and dresses (like coats!)
- if (%q3ext.qlb.tempcovered% > 31) and __
- ($objectproperty(#q3ext.qlb.object#;botcover)$ < 16) and __
- ($objectproperty(#q3ext.qlb.object#;botcover)$ <> 4) then {
- set <q3ext.qlb.tempcovered;%q3ext.qlb.tempcovered% - 32>
- }
- ' - disallow wearing of skirts/dresses and trousers simultaneously
- if (%q3ext.qlb.tempcovered% > 15) then {
- set <q3ext.qlb.tempcovered;%q3ext.qlb.tempcovered% + 16>
- }
- if ($objectproperty(#q3ext.qlb.object#;botcover)$ <> 0) and __
- ($objectproperty(#q3ext.qlb.object#;botcover)$ <= %q3ext.qlb.tempcovered%) then {
- set <q3ext.qlb.wearable;%q3ext.qlb.wearable% + 1>
- }
- if (%q3ext.qlb.wearable% =0) then {
- doaction <#q3ext.qlb.object#;wear>
- property <#q3ext.qlb.object#; not unworn>
- set <q3ext.qlb.topcovered;%q3ext.qlb.topcovered% + $objectproperty(#q3ext.qlb.object#;topcover)$>
- set <q3ext.qlb.headcovered;%q3ext.qlb.headcovered% + $objectproperty(#q3ext.qlb.object#;headcover)$>
- set <q3ext.qlb.handscovered;%q3ext.qlb.handscovered% + $objectproperty(#q3ext.qlb.object#;handscover)$>
- set <q3ext.qlb.feetcovered;%q3ext.qlb.feetcovered% + $objectproperty(#q3ext.qlb.object#;feetcover)$>
- set <q3ext.qlb.botcovered;%q3ext.qlb.botcovered% + $objectproperty(#q3ext.qlb.object#;botcover)$>
- }
- else {
- msg <Given what you are already wearing - that makes no sense at all.>
- }
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* The 'unwear' command procedure. *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.UnWearProc>
- set <q3ext.qlb.object;$q3ext.qlb.realname(#q3ext.qlb.object#)$>
- if not property <#q3ext.qlb.object#; unworn> then {
- if action <#q3ext.qlb.object#;unwear> then {
- do <q3ext.qlb.CheckUnwearProc>
- }
- else {
- msg <You cannot do that.>
- }
- }
- else {
- msg <You aren't wearing the #q3ext.qlb.object#.>
- }
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* The 'CheckUnwear' procedure. *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.CheckUnwearProc>
- set numeric <q3ext.qlb.wearable;0>
- set <q3ext.qlb.tempcovered; %q3ext.qlb.topcovered% /2>
- if ($objectproperty(#q3ext.qlb.object#;topcover)$ <> 0) and __
- ($objectproperty(#q3ext.qlb.object#;topcover)$ <= %q3ext.qlb.tempcovered%) then {
- set <q3ext.qlb.wearable;%q3ext.qlb.wearable% + 1>
- }
- set <q3ext.qlb.tempcovered; %q3ext.qlb.headcovered% /2>
- if ($objectproperty(#q3ext.qlb.object#;headcover)$ <> 0) and __
- ($objectproperty(#q3ext.qlb.object#;headcover)$ <= %q3ext.qlb.tempcovered%) then {
- set <q3ext.qlb.wearable;%q3ext.qlb.wearable% + 2>
- }
- set <q3ext.qlb.tempcovered; %q3ext.qlb.feetcovered% /2>
- if ($objectproperty(#q3ext.qlb.object#;feetcover)$ <> 0) and __
- ($objectproperty(#q3ext.qlb.object#;feetcover)$ <= %q3ext.qlb.tempcovered%) then {
- set <q3ext.qlb.wearable;%q3ext.qlb.wearable% + 4>
- }
- set <q3ext.qlb.tempcovered; %q3ext.qlb.handscovered% /2>
- if ($objectproperty(#q3ext.qlb.object#;handscover)$ <> 0) and __
- ($objectproperty(#q3ext.qlb.object#;handscover)$ <= %q3ext.qlb.tempcovered%) then {
- set <q3ext.qlb.wearable;%q3ext.qlb.wearable% + 8>
- }
- ' - disallow for coats (don't affect ability to take off lower torso clothes)
- set <q3ext.qlb.tempcovered;%q3ext.qlb.botcovered%>
- if (%q3ext.qlb.tempcovered% > 63) then {
- set <q3ext.qlb.tempcovered;%q3ext.qlb.tempcovered% - 64>
- }
- ' - disallow for skirts and dresses (like coats!)
- if (%q3ext.qlb.tempcovered% > 31) and __
- ($objectproperty(#q3ext.qlb.object#;botcover)$ <> 4) then {
- set <q3ext.qlb.tempcovered;%q3ext.qlb.tempcovered% - 32>
- }
- set <q3ext.qlb.tempcovered;%q3ext.qlb.tempcovered% /2>
- if ($objectproperty(#q3ext.qlb.object#;botcover)$ <> 0) and __
- ($objectproperty(#q3ext.qlb.object#;botcover)$ <= %q3ext.qlb.tempcovered%) then {
- set <q3ext.qlb.wearable;%q3ext.qlb.wearable% + 16>
- }
- if (%q3ext.qlb.wearable% =0) then {
- doaction <#q3ext.qlb.object#;unwear>
- property <#q3ext.qlb.object#; unworn>
- set <q3ext.qlb.topcovered;%q3ext.qlb.topcovered% - $objectproperty(#q3ext.qlb.object#;topcover)$>
- set <q3ext.qlb.headcovered;%q3ext.qlb.headcovered% - $objectproperty(#q3ext.qlb.object#;headcover)$>
- set <q3ext.qlb.handscovered;%q3ext.qlb.handscovered% - $objectproperty(#q3ext.qlb.object#;handscover)$>
- set <q3ext.qlb.feetcovered;%q3ext.qlb.feetcovered% - $objectproperty(#q3ext.qlb.object#;feetcover)$>
- set <q3ext.qlb.botcovered;%q3ext.qlb.botcovered% - $objectproperty(#q3ext.qlb.object#;botcover)$>
- }
- else {
- msg <Given what you are wearing, that isn't possible.>
- }
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* Open and close commands for 'openable' type *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.OpenProc>
- set <q3ext.qlb.object; $q3ext.qlb.realname(#q3ext.qlb.object#)$>
- if action <#q3ext.qlb.object#; open> then {
- doaction <#q3ext.qlb.object#; open>
- }
- else msg <You can't do that.>
- end define
-
- define procedure <q3ext.qlb.CloseProc>
- set <q3ext.qlb.object; $q3ext.qlb.realname(#q3ext.qlb.object#)$>
- if action <#q3ext.qlb.object#; close> then {
- doaction <#q3ext.qlb.object#; close>
- }
- else msg <You can't do that.>
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* This forces the inventory window to be refreshed - Quest doesn't do it itself! *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <force_refresh>
- outputoff
- set string <q3ext.qlb.wherenow;#quest.currentroom#>
- goto <q3ext.qlb.limbo>
- goto <#q3ext.qlb.wherenow#>
- outputon
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* This is called to initialise the library *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define procedure <q3ext.qlb.setup>
- ' These are defaults - making the player male and naked! - it will probably be
- ' required to set these variables differently in the startscript AFTER calling
- ' this setup routine
- ' 'q3ext.qlb.playersex' should be set to 1 for a male player, 2 for a female.
- set numeric <q3ext.qlb.headcovered;0>
- set numeric <q3ext.qlb.handscovered;0>
- set numeric <q3ext.qlb.feetcovered;0>
- set numeric <q3ext.qlb.topcovered;0>
- set numeric <q3ext.qlb.botcovered;0>
- set numeric <q3ext.qlb.tempcovered;0>
- set numeric <q3ext.qlb.playersex;1>
- set numeric <q3ext.qlb.version;6>
- if (%q3ext.qlb.version% < $parameter(1)$) then {
- msg <WARNING!|n|nThis game requires Version $parameter(1)$ (or later) of _
- the Q3EXT.QLB library, you appear to have Version %q3ext.qlb.version%. _
- |n|nPlease obtain the latest release of the library before trying to run this _
- game.|n|n|w>
- }
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* FUNCTION DEFINITIONS FOLLOW *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* Returns passed string that was comma separated list 'parsed' to read naturally. *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define function <q3ext.qlb.parsed>
- set numeric <q3ext.qlb.FoundComma;0>
- set string <q3ext.qlb.Param;$parameter(1)$>
- for <q3ext.qlb.LastComma;1;$lengthof(#q3ext.qlb.Param#)$> {
- do <q3ext.qlb.LastCommaProc>
- }
- if not is <%q3ext.qlb.FoundComma%;0> then {
- set numeric <q3ext.qlb.remaining;%q3ext.qlb.LastComma%-%q3ext.qlb.FoundComma%>
- set <q3ext.qlb.remaining;%q3ext.qlb.remaining%-1>
- set <q3ext.qlb.FoundComma;%q3ext.qlb.FoundComma%-1>
- set string <q3ext.qlb.LeftPart;$left(#q3ext.qlb.Param#;__
- %q3ext.qlb.FoundComma%)$>
- set string <q3ext.qlb.RightPart;$right(#q3ext.qlb.Param#;__
- %q3ext.qlb.remaining%)$>
- set string <q3ext.qlb.parsed;#q3ext.qlb.LeftPart# and #q3ext.qlb.RightPart#>
- }
- if is <%q3ext.qlb.FoundComma%;0> then {
- set string <q3ext.qlb.parsed;#q3ext.qlb.Param#>
- }
- return <#q3ext.qlb.parsed#>
- end define
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* The following function returns the name of the object in who's container the *
- '* looked at object is held, or 'nil' if the object isn't in a container. *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define function <q3ext.qlb.containedby>
- set <q3ext.qlb.object; $q3ext.qlb.realname(#q3ext.qlb.object#)$>
- set string <q3ext.qlb.containedby;$locationof(#q3ext.qlb.object#)$>
- set numeric <q3ext.qlb.LengthOf;$lengthof(#q3ext.qlb.containedby#)$>
- if (%q3ext.qlb.LengthOf% < 11) then {
- set <q3ext.qlb.containedby;nil>
- }
- if (%q3ext.qlb.LengthOf% > 11) then {
- set <q3ext.qlb.containedby;$right(#q3ext.qlb.containedby#;10)$>
- }
- if (#q3ext.qlb.containedby# <> _inventory) then {
- set <q3ext.qlb.containedby;nil>
- }
- if (#q3ext.qlb.containedby# = _inventory) then {
- set <q3ext.qlb.containedby;$locationof(#q3ext.qlb.object#)$>
- set <q3ext.qlb.LengthOf;%q3ext.qlb.LengthOf%-10>
- set <q3ext.qlb.containedby;$left(#q3ext.qlb.containedby#;%q3ext.qlb.LengthOf%)$>
- }
- return <#q3ext.qlb.containedby#>
- end define
-
- define function <q3ext.qlb.wornfix>
- set string <q3ext.qlb.wornfix;#q3ext.qlb.object#>
- if action <#q3ext.qlb.object#; wear> and not property <#q3ext.qlb.object#; unworn> then {
- set <q3ext.qlb.wornfix;#q3ext.qlb.object# [worn]>
- }
- return <#q3ext.qlb.wornfix#>
- end define
-
- define function <q3ext.qlb.objname>
- set string <q3ext.qlb.objname;$parameter(1)$>
- set <q3ext.qlb.objname;$q3ext.qlb.realname(#q3ext.qlb.objname#)$>
- set <q3ext.qlb.objname;$displayname(#q3ext.qlb.objname#)$>
- return <#q3ext.qlb.objname#>
- end define
-
- define function <q3ext.qlb.realname>
- set numeric <q3ext.qlb.found;0>
- set string <q3ext.qlb.objname;$parameter(1)$>
- set string <q3ext.qlb.lobjname;$lcase(#q3ext.qlb.objname#)$>
-
- for each object in <#quest.currentroom#> {
- set string <q3ext.qlb.display;$displayname(#quest.thing#)$>
- set string <q3ext.qlb.display;$lcase(#q3ext.qlb.display#)$>
- set string <q3ext.qlb.realname;#quest.thing#>
- set string <q3ext.qlb.realname;$lcase(#q3ext.qlb.realname#)$>
- if ( $instr(#q3ext.qlb.display#;#q3ext.qlb.lobjname#)$ > 0 ) or _
- ( $instr(#q3ext.qlb.lobjname#;#q3ext.qlb.realname#)$ > 0 ) then {
- set <q3ext.qlb.objname;#quest.thing#>
- set <q3ext.qlb.found;1>
- }
- }
- if (%q3ext.qlb.found% = 0) then {
- for each object in inventory {
- set string <q3ext.qlb.display;$displayname(#quest.thing#)$>
- set string <q3ext.qlb.display;$lcase(#q3ext.qlb.display#)$>
- set string <q3ext.qlb.realname;#quest.thing#>
- set string <q3ext.qlb.realname;$lcase(#q3ext.qlb.realname#)$>
- if ( $instr(#q3ext.qlb.display#;#q3ext.qlb.lobjname#)$ > 0 ) or _
- ( $instr(#q3ext.qlb.lobjname#;#q3ext.qlb.realname#)$ > 0 ) then {
- set <q3ext.qlb.objname;#quest.thing#>
- set <q3ext.qlb.found;1>
- }
- }
- }
- if (%q3ext.qlb.found% = 0) then {
- for each object in game {
- set string <q3ext.qlb.display;$displayname(#quest.thing#)$>
- set string <q3ext.qlb.display;$lcase(#q3ext.qlb.display#)$>
- set string <q3ext.qlb.realname;#quest.thing#>
- set string <q3ext.qlb.realname;$lcase(#q3ext.qlb.realname#)$>
- if ( $instr(#q3ext.qlb.display#;#q3ext.qlb.lobjname#)$ > 0 ) or _
- ( $instr(#q3ext.qlb.lobjname#;#q3ext.qlb.realname#)$ > 0 ) then {
- set <q3ext.qlb.objname;#quest.thing#>
- }
- }
- }
- return <#q3ext.qlb.objname#>
- end define
-
-
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- '* TYPE DEFINITIONS FOLLOW *
- '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define type <human>
- human
- type <container>
- displaytype=Person
- action <take> {
- set string <q3ext.qlb.object; $mid(#quest.command#;6)$>
- msg <You can't take $capfirst(#q3ext.qlb.object#)$!>
- }
- action <speak> {
- set string <q3ext.qlb.object; $mid(#quest.command#;10)$>
- msg <$capfirst(#q3ext.qlb.object#)$ doesn't reply to you.>
- }
- action <give anything> {
- if property <#q3ext.qlb.GiveTo#;container> then {
- msg <|n$capfirst(#q3ext.qlb.GiveTo#)$ accepts the #q3ext.qlb.GiveObj#.>
- move <#q3ext.qlb.GiveObj#;#q3ext.qlb.GiveTo#_inventory>
- }
- else {
- msg <$capfirst(#q3ext.qlb.GiveTo#)$ doesn't seem to want the #q3ext.qlb.GiveObj#.>
- }
- }
- end define
-
- ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define type <container>
- container
- action <contents> {
- if not property <#q3ext.qlb.object#; closed> then {
- outputoff
- goto <#q3ext.qlb.object#_inventory>
- set string <q3ext.qlb.whatsheld;$gettag(#q3ext.qlb.object#_inventory;prefix)$$q3ext.qlb.parsed(#quest.formatobjects#)$.>
- if ($lengthof(#quest.objects#)$ = 0) then set <q3ext.qlb.whatsheld;>
- outputon
- msg <#q3ext.qlb.whatsheld#>
- outputoff
- goto <#q3ext.qlb.whereat#>
- outputon
- }
- }
-
- action <give anything> {
- msg <You put the #q3ext.qlb.GiveObj# in the #q3ext.qlb.GiveTo#.>
- move <#q3ext.qlb.GiveObj#; #q3ext.qlb.GiveTo#_inventory>
- }
- end define
-
- ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define type <object>
- prefix = a
- take = nil
- action <take> {
- if ($objectproperty(#q3ext.qlb.object#;take)$=nil) then {
- msg <You pick up the #q3ext.qlb.object#.>
- }
- else {
- msg <$objectproperty(#q3ext.qlb.object#;take)$.>
- }
- move <#q3ext.qlb.object#;inventory>
- do <force_refresh>
- }
- end define
-
- ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define type <scenery>
- invisible
- prefix = a
- pronoun = that
- notake = nil
- action <take> {
- if ($objectproperty(#q3ext.qlb.object#;notake)$=nil) then {
- msg <Taking $objectproperty(#q3ext.qlb.object#;pronoun)$ would serve no useful purpose.>
- }
- else {
- msg <$objectproperty(#q3ext.qlb.object#;notake)$.>
- }
- }
- end define
-
- ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define type <readable>
- readable
- readmessage = You start to read but it is so incredibly dull you decide not to bother.
- readaction = nil
- action <read> {
- set string <q3ext.qlb.objname;$thisobject$>
- msg <$objectproperty(#q3ext.qlb.objname#;readmessage)$>
- }
- end define
-
- ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ' * The openable type *
- ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define type <openable>
- closed
- properties <closeddesc = null>
- properties <opendesc = null>
- properties <closingdesc = null>
- properties <openingdesc = null>
- properties <closedexam = null>
- properties <openexam = null>
-
- prefix = a
-
- action <open> {
- set string <q3ext.qlb.opened; $thisobject$>
- if property <$thisobject$; closed> then {
- property <$thisobject$; not closed>
- if ($objectproperty(#q3ext.qlb.opened#; openingdesc)$ = null) then {
- msg <You open the #q3ext.qlb.object#.>
- }
- else {
- msg <$objectproperty(#q3ext.qlb.opened#; openingdesc)$>
- }
- }
- else msg <The #q3ext.qlb.object# is already open.>
- }
-
- action <close> {
- set string <q3ext.qlb.closed; $thisobject$>
- if not property <$thisobject$;closed> then {
- property <$thisobject$; closed>
- if ($objectproperty(#q3ext.qlb.closed#; closingdesc)$ = null) then {
- msg <You close the #q3ext.qlb.object#.>
- }
- else {
- msg <$objectproperty(#q3ext.qlb.closed#; closingdesc)$.>
- }
- }
- else msg <The #q3ext.qlb.object# is already closed.>
- }
-
- action <look> {
- set string <q3ext.qlb.lookedat; $thisobject$>
- if property <$thisobject$; closed> then {
- if ($objectproperty(#q3ext.qlb.lookedat#; closeddesc)$ = null) then {
- set string <q3ext.qlb.lookmessage ;The #q3ext.qlb.lookedat# is closed>
- }
- else {
- set string <q3ext.qlb.lookmessage ;$objectproperty(#q3ext.qlb.lookedat#; closeddesc)$.>
- }
- }
- else {
- if ($objectproperty(#q3ext.qlb.lookedat#; opendesc)$ = null) then {
- set string <q3ext.qlb.lookmessage ;The #q3ext.qlb.lookedat# is open>
- }
- else {
- set string <q3ext.qlb.lookmessage ;$objectproperty(#q3ext.qlb.lookedat#; opendesc)$.>
- }
- }
- msg <#q3ext.qlb.lookmessage#.>
- }
-
- end define
-
- ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ' * This clothing type is not used directly but inherited by specific clothes. *
- ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define type <clothing>
- type <object>
- unworn
- headcover = 0
- handscover = 0
- feetcover = 0
- topcover = 0
- botcover = 0
- sex = 1
- pronoun = it
- wearmessage = You put it on.
- unwearmessage = You take it off.
- properties <alias=$thisobject$>
- action <wear> {
- set string <q3ext.qlb.objname;$thisobject$>
- msg <$objectproperty(#q3ext.qlb.objname#;wearmessage)$>
- property <#q3ext.qlb.objname#;alias=#q3ext.qlb.objname# [worn]>
- move <#q3ext.qlb.objname#;inventory>
- do <force_refresh>
- }
- action <unwear> {
- set string <q3ext.qlb.objname;$thisobject$>
- msg <$objectproperty(#q3ext.qlb.objname#;unwearmessage)$>
- property <#q3ext.qlb.objname#;alias=$thisobject$>
- do <force_refresh>
- }
- end define
-
- ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ' * This lib defines 15 specific clothing objects, and most of these can be used *
- ' * to good effect for other garments - the defined objects are listed together *
- ' * with other garments that work similarly for game purposes. *
- ' * *
- ' * DEFINED GARMENT : ALSO USABLE FOR THESE GARMENTS *
- ' * hat : any headwear *
- ' * gloves : any handwear *
- ' * shoes : boots, outer footwear generally *
- ' * socks : stockings *
- ' * tights : pantie hose *
- ' * undies : panties, briefs - lower portion underwear generally *
- ' * teddy : uhm.. any underthing that covers like a teddy! *
- ' * trousers : jeans, shorts (not the underwear variety) *
- ' * dress : coverall *
- ' * skirt : kilt maybe? *
- ' * vest : bra, other 'top only' undergarment *
- ' * shirt : blouse, T-Shirt etc. *
- ' * sweater : pullover, sweatshirt - '2nd layer' top garment *
- ' * jacket : fleece, parka, anorak, short coat of whatever type *
- ' * coat : any long length outermost garment like a coat *
- ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- define type <shoes>
- type <clothing>
- feetcover = 4
- wearmessage = You put them on.
- unwearmessage = You take them off.
- pronoun = them
- properties <prefix=a pair of>
- end define
-
- define type <socks>
- type <clothing>
- feetcover = 2
- wearmessage = You put them on.
- unwearmessage = You take them off.
- pronoun = them
- properties <prefix=a pair of>
- end define
-
- define type <tights>
- type <clothing>
- feetcover = 2
- botcover = 8
- pronoun = them
- wearmessage = You put them on.
- unwearmessage = You take them off.
- properties <prefix=a pair of>
- end define
-
- define type <hat>
- type <clothing>
- headcover = 2
- wearmessage = You put it on.
- unwearmessage = You take it off.
- properties <prefix=a>
- end define
-
- define type <gloves>
- type <clothing>
- handscover = 2
- wearmessage = You put them on.
- unwearmessage = You take them off.
- pronoun = them
- properties <prefix=a pair of>
- end define
-
- define type <vest>
- type <clothing>
- topcover = 2
- wearmessage = You put it on.
- unwearmessage = You take it off.
- properties <prefix=a>
- end define
-
- define type <shirt>
- type <clothing>
- topcover = 8
- wearmessage = You put it on.
- unwearmessage = You take it off.
- properties <prefix=a>
- end define
-
- define type <teddy>
- type <clothing>
- topcover = 4
- botcover = 4
- wearmessage = You put it on.
- unwearmessage = You take it off.
- properties <prefix=a>
- end define
-
- define type <undies>
- type <clothing>
- botcover = 2
- wearmessage = You put them on.
- unwearmessage = You take them off.
- pronoun = them
- properties <prefix=a pair of>
- end define
-
- define type <dress>
- type <clothing>
- topcover = 8
- botcover = 32
- wearmessage = You put it on.
- unwearmessage = You take it off.
- properties <prefix=a>
- end define
-
- define type <skirt>
- type <clothing>
- botcover = 32
- wearmessage = You put it on.
- unwearmessage = You take it off.
- properties <prefix=a>
- end define
-
- define type <trousers>
- type <clothing>
- botcover = 16
- wearmessage = You put them on.
- unwearmessage = You take them off.
- pronoun = them
- properties <prefix=a pair of>
- end define
-
- define type <sweater>
- type <clothing>
- topcover = 16
- wearmessage = You put it on.
- unwearmessage = You take it off.
- properties <prefix=a>
- end define
-
- define type <jacket>
- type <clothing>
- topcover = 32
- wearmessage = You put it on.
- unwearmessage = You take it off.
- properties <prefix=a>
- end define
-
- define type <coat>
- type <clothing>
- topcover = 64
- botcover = 64
- wearmessage = You put it on.
- unwearmessage = You take it off.
- properties <prefix=a>
- end define
-
- ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *